/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package tablasSql;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.Vector;
import otros.Fecha;
import otros.MiTableModel;

/**
 *
 * @author FERRETERIA funciona esto?
 */
public class Compras {
    
    public final static String TABLA = "compras"; 
    private final static String TABLALIST = "listaArtCompras"; 
    
    public static int guardar (String [] datos, boolean guardar) {
        int numString = 6;
        int numFloat = 9;
        String sql = "";
        
        if (!guardar) {
           sql = "update " + TABLA + " set fecha = ?, fechaCom = ?, fechaPago=?, fechaVenc=?,";
           sql += "observacion = ?, numFact = ?,total = ?,sobrecargo=?, descuento = ?, ";
           sql += " idProve = ?, tipo = ?, tipopago = ?, periodo = ?   where id = ?";
        }
        else {
            sql = "insert into " + TABLA + " (fecha, fechaCom, fechaPago, fechaVenc,";
            sql += "observacion, numFact, total, sobrecargo,descuento, idProve, tipo, tipopago, ";
            sql += "periodo) values (?,?,?,?,?,?,?,?,?,?,?,?,?)";
        }
        return new Sql().actualizarDatos(sql, datos, numString, numFloat);        
    }
    
    public static void guardarLista (String [] datos) {
        int numString = 2;
        int numFloat = 7;
        String sql = "";
                
        sql = "insert into "+ TABLALIST+" (detalle, descuento, precio, total,costo, cantidad, tipoIgic,idarticulo,";
        sql += "pos, id) values (?,?,?,?,?,?,?,?,?,?)";

        new Sql().actualizarDatos(sql, datos, numString, numFloat);
    }
    
    public static int convertir (String [] datos) {
       String sql = "update "+ TABLALIST + " set id = ?, pos = pos + ? where id = ?";
       new Sql().actualizarDatos(sql, datos, 0, 0);
       return Sql.getCount("id",datos[0], TABLALIST);
    }
    
    public static ResultSet getListArticulos(int id){
        String sql = "SELECT idarticulo, Detalle, cantidad, precio, descuento, total, costo, tipoIgic from " + TABLALIST;
        sql += " where id = " + id + " order by pos asc";
        return new Sql().getDatos(sql);
    }
    
    public static ResultSet getCompra(int id){
        String sql = "SELECT * from " + TABLA;
        sql += " where id = " + id;
        return new Sql().getDatos(sql);
    }
    
    public static void borrarListArticulos (int id) {
       String sql = "delete from " + TABLALIST + " where id = " + id;
       new Sql().hacerConsulta(sql); 
    }
    
    public static void borrarCompra (int id) {
       String sql = "delete from " + TABLA + " where id = " + id;
       new Sql().hacerConsulta(sql); 
    }
    
    public static MiTableModel getTabla(int tipo, int id, int tipoPago, int idProve, 
                                            int dia, int mes, int año, int diaH, int mesH, int añoH, 
                                            int tFecha, String numFac) {
        String[] columNames = {"ID", "Proveedor", "Importe", "Tipo", "F.Modificada", 
                            "F.Compra", "F.Vencimi","Plazos","F.Pago"}; 
        String[] tableNames = {"ID", "nombre", "total", "tipos", "fecha", "fechacom", 
                            "fechaVenc","periodo","fechaPago"};
        Class [] tipos = {Integer.class, String.class, Float.class, String.class, 
                            String.class, String.class, String.class, Integer.class, String.class};
        
        String tabla = TABLA;
        
        String sql = "SELECT id,concat_ws(' ',observacion, nproveedores.nombrecomercial) as nombre,"
                + "total, concat(tipo, "+TABLA+".tipopago)as tipos, fecha, fechacom, "
                + "fechaVenc, periodo, fechaPago "
                + "from "+ tabla + ", nproveedores "
                + "where " + tabla + ".idProve = nproveedores.codigo";
        String contar = tabla;
        
        Vector<String> ops = new Vector<String>();
        if (tipo != 3) 
            ops.add(tabla + ".tipo = " + tipo);
        if (id != 0)
            ops.add(tabla + ".id = " + id);
        if (tipoPago != 0)
            ops.add(tabla + ".tipopago = " + (tipoPago-1));
        if (idProve >= 0)
            ops.add(tabla + ".idProve = " + idProve);
        String campoFecha;
        switch (tFecha) {
            case 1: campoFecha = ".fechaVenc"; break;
            case 2: campoFecha = ".fechapago"; break;
            default: campoFecha = ".fechacom"; break;
            
        }
        if (tFecha == 1) {
            try{
                DecimalFormat df = new DecimalFormat("00"); 
                String condicion = " fechapago is null and '" + año + "-" + df.format(mes) +
                       "' between date_format(date_sub(fechavenc, interval periodo month), '%Y-%m') "
                        + "and date_format(fechavenc,'%Y-%m')";
                ops.add(condicion);
            }catch (Exception e) {
                System.out.println("Error en formatear fecha Compras.getTabla fecha vencimiento \n"+ e);
            }
        }
        else {
            String cond = "";
            if (dia != 0) {
                if (diaH != 0) 
                    cond = " DAY(" + tabla + campoFecha + ") between " + dia + " and " + diaH;
                else
                    cond = "DAY(" + tabla + campoFecha + ") = " + dia;
                ops.add(cond);
            }
            if (mes != 0) {
                if (mesH != 0) 
                    cond = "MONTH(" + tabla + campoFecha + ") between " + mes + " and " + mesH;
                else
                   cond = "MONTH(" + tabla + campoFecha + ") = " + mes;
                ops.add(cond);
            }
            if (año != 0) {
                if (añoH != 0) 
                    cond = "YEAR(" + tabla + campoFecha + ") between " + año + " and " + añoH;
                else
                   cond = "YEAR(" + tabla + campoFecha + ") = " + año;
                ops.add(cond);
            }
        }
        if (!numFac.isEmpty())
            ops.add(tabla + ".numFact like '%" + numFac+ "%'");

        for(int i = 0; i < ops.size(); i++) {
            sql += " and " + ops.get(i);
            if (i > 0)
               contar += " and " + ops.get(i);
            else
                contar += " where " + ops.get(i);
        }
        sql += " order by " + tabla + campoFecha + " desc," + tabla + ".fecha desc" ;
        
        Object[][] dtDatos = new Sql().GetTabla(tableNames, contar, sql, tipos);
        
        return new MiTableModel(dtDatos,columNames);    
    }
    
    public static MiTableModel getTabla347(int tipoTicket, int idProve, 
                                            String año) {
        String[] columNames = {"Id","Proveedor", "Imp.Bruto"}; 
        String[] tableNames = {"id","Nombre", "importe"};
        Class [] tipos = {String.class, Float.class};        
        String tabla = TABLA;
        
        String sql = "SELECT " + tabla + ".idProve as id, nproveedores.nombrecomercial as nombre, "
                      + "sum(((1-descuento/100)*total) * (1 + sobrecargo/100)) as importe "
                      + "from "+ tabla + ", nproveedores " +
                     "where " + tabla + ".idProve = nproveedores.codigo";

        Vector<String> ops = new Vector<String>();
        ops.add(tabla + ".tipo = " + tipoTicket);
        if (idProve >= 0)
            ops.add(tabla + ".idProve = " + idProve);
        
        if (año != null)
            ops.add("Year(" + tabla + ".fechacom) = " + año);
        
        for(int i = 0; i < ops.size(); i++) {
            sql += " and " + ops.get(i);
        }
        sql += " group by " + tabla + ".idProve";
        
        MiTableModel dtable = null;
        ResultSet res = new Sql().getDatos(sql);
        try {
            dtable = new MiTableModel(null,columNames);
            while (res.next()) {
               dtable.addRow(new Object[] { res.getInt(tableNames[0]),
                                            res.getString(tableNames[1]), 
                                            new Float (res.getFloat(tableNames[2]))});
            }        
        } catch (SQLException ex) {
            dtable = null;
        }
        return dtable;    
    }
}
